Introduction

Data visualization makes it possible to communicate what the information means in a clear way to multiple users. Through the use of visual contexts, learning from the results of an analysis is useful to drive action and data-driven decision making. There are different packages in R that allow us to build different types of visualizations such as graphs, diagrams or maps, in an efficient and simple way.

Objective

In this section, some examples of visualizations will be built from the data preprocessed in the previous sections and these will be interpreted to propose some possible actions to address the murder problem that was established as the main objective at the beginning of this workshop.

Data preparation

First of all, clear all objects from the environment:

rm(list = ls())

Load the packages to be used in this session:

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5     ✓ purrr   0.3.4
## ✓ tibble  3.1.4     ✓ dplyr   1.0.7
## ✓ tidyr   1.1.3     ✓ stringr 1.4.0
## ✓ readr   1.4.0     ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(sf)
## Linking to GEOS 3.8.1, GDAL 3.2.1, PROJ 7.2.1
library(raster)
## Loading required package: sp
## 
## Attaching package: 'raster'
## The following object is masked from 'package:dplyr':
## 
##     select
## The following object is masked from 'package:tidyr':
## 
##     extract
library(DT)
library(tmap)
library(leaflet)

Read the previously prepared dataset for murders by state and month (murders_by_state.csv):

murders_by_state <-
  read_csv("Data/murders_by_state.csv") %>% 
  glimpse()
## 
## ── Column specification ────────────────────────────────────────────────────────
## cols(
##   clave_ent = col_double(),
##   entidad = col_character(),
##   mes = col_date(format = ""),
##   homicidios = col_double()
## )
## Rows: 608
## Columns: 4
## $ clave_ent  <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,…
## $ entidad    <chr> "Aguascalientes", "Aguascalientes", "Aguascalientes", "Agua…
## $ mes        <date> 2018-12-01, 2019-01-01, 2019-02-01, 2019-03-01, 2019-04-01…
## $ homicidios <dbl> 25, 28, 24, 22, 25, 29, 20, 15, 13, 26, 23, 21, 23, 15, 16,…

Choropleth map

Choropleth maps are used to easily visualize variations in quantities by coloring polygons. In this case, this kind of maps can be useful to compare murders per 10,000 inhabitants for each state in Mexico. To achieve this we will use the states layer associated with crimes data state_offenses.gpkg, created previously on section 2:

states_offenses <-
  st_read("Data/states_offenses.gpkg") %>% 
  glimpse()
## Reading layer `states_offenses' from data source 
##   `/Users/cristiansilva/Documents/Centro Geo/iGISc 2021 Workshop/igisc-workshop_2021/Data/states_offenses.gpkg' 
##   using driver `GPKG'
## Simple feature collection with 32 features and 10 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -118.3651 ymin: 14.5321 xmax: -86.71468 ymax: 32.71865
## Geodetic CRS:  WGS 84
## Rows: 32
## Columns: 11
## $ clave_ent     <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1…
## $ entidad       <chr> "Aguascalientes", "Baja California", "Baja California Su…
## $ poblacion     <dbl> 1425607, 3769020, 798447, 928363, 3146771, 731391, 55438…
## $ extorsion     <dbl> 637, 1171, 935, 138, 204, 366, 960, 96, 3743, 524, 166, …
## $ homicidio     <dbl> 436, 13761, 1313, 464, 1443, 3474, 3232, 11257, 7210, 12…
## $ secuestro     <dbl> 48, 88, 17, 32, 91, 59, 109, 94, 689, 40, 55, 350, 143, …
## $ ext_10khab    <dbl> 4.4682721, 3.1069084, 11.7102325, 1.4864875, 0.6482836, …
## $ sec_10khab    <dbl> 0.33669868, 0.23348244, 0.21291332, 0.34469275, 0.289185…
## $ hom_10khab    <dbl> 3.058346, 36.510817, 16.444423, 4.998045, 4.585653, 47.4…
## $ nom_abreviado <chr> "AGS", "BC", "BCS", "CAMP", "COAH", "COL", "CHIS", "CHIH…
## $ geom          <MULTIPOLYGON [°]> MULTIPOLYGON (((-102.0756 2..., MULTIPOLYGO…

Then, build a choropleth map with the outcomes and compare murder rates between states, using the package tmap:

tm_shape(states_offenses) + # Create an empty map
  tm_polygons("hom_10khab",
              title = "Murders per 10K inhabitants") + # Add states polygon layer using hom_10khab data
  tm_layout(main.title = "Most violent states in Mexico, Dec. 2018 to Jun. 2021") +  # Add a title to the map
  tm_credits("Data from INEGI and SESNSP.",
             position = c("left", "bottom")) # Add sources

Choropleth hexgrid map

Let’s make a variation of the choropleth map now using a hexgrid to help visually comparing states using same size hexagons and representing a simplified version of the states map.

Now the rmapshaper and geogrid packages are to be used to build the hexagrid, so first of all it is necessary to remove all islands from the polygons layer to ensure having just contiguous states to be represented by hexagons. To remove islands from the states_offenses layer, use the ms_filter_islands to remove every island with less than 1,500 vertices for example:

library(rmapshaper)
## Registered S3 method overwritten by 'geojsonlint':
##   method         from 
##   print.location dplyr
library(geogrid)

states_without_islands <-
  states_offenses %>% 
  ms_filter_islands(min_vertices = 1500)

# Preview states layer without islands:
qtm(states_without_islands)

Next, use the calculate_grid function with different seed values to generate some possible hexagonal grid arranges and visualize them with the plot function in order to select the most appropriated:

# Set some parameters to plot the 10 tests in a grid of 2 rows x 5 columns
par(mfrow = c(2, 5), mar = c(0, 0, 2, 0))

# Iterate the seed to build possible hexgrids:
for (i in 1:10) {
  new_cells <- calculate_grid(shape = states_without_islands, grid_type = "hexagonal", seed = i)
  plot(new_cells, main = paste("Seed", i, sep = " "))
}
## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

## Warning in proj4string(obj): CRS object has comment, which is lost in output

There are some warnings, just ignore them and proceed because they are related to an older version of PROJ libraries used by the package.

Apparently, the best fitting hexgrid for the Mexico states is the one built with Seed 7. Calculate again the hexgrid using the seed = 7 and use the assign_polygons function to combine the states_offenses values into it and keep just the clave_ent (state ID), nom_abreviado (abbreviated state name) and the hom_10khab (murders rate per 10K inhabitants) variables:

# Create the hexgrid with the best seed:
state_cells_hex <- calculate_grid(shape = states_without_islands, grid_type = "hexagonal", seed = 7)

# Assign original layer variables to it:
states_hex <- 
  assign_polygons(states_without_islands, state_cells_hex) %>% 
  dplyr::select(clave_ent, nom_abreviado, hom_10khab) %>% # Warning: both raster and tidyverse have a 'select' function, we need the latter
  glimpse()
## Rows: 32
## Columns: 4
## $ clave_ent     <dbl> 20, 30, 7, 16, 12, 21, 27, 4, 6, 17, 9, 31, 23, 18, 15, …
## $ nom_abreviado <chr> "OAX", "VER", "CHIS", "MICH", "GRO", "PUE", "TAB", "CAMP…
## $ hom_10khab    <dbl> 12.136545, 10.319279, 5.829907, 20.057505, 34.589352, 8.…
## $ geometry      <POLYGON [°]> POLYGON ((-98.41321 17.4134..., POLYGON ((-95.87…

Preview resulting hexbin states layer:

qtm(states_hex) + 
  tm_text("nom_abreviado") # Add a text layer to label with 'nom_abreviado'

The hexgrid seems to be acceptable to represent the states, now build the choropleth map like the first one, but changing the original shape to use the hexgrid states layer to identify the ones with the higher murder rates in the defined period of time:

tm_shape(states_hex) +
  tm_polygons("hom_10khab",
              title = "Murders per 10K inhabitants") +
  tm_text("nom_abreviado") +
  tm_layout(main.title = "Most violent states in Mexico, Dec. 2018 to Jun. 2021") +
  tm_credits("Data from INEGI and SESNSP.",
             position = c("left", "bottom"))

This type of map is more readable and makes it more easy to compare the murders rate volume just by color and not by polygon size, making it a simplified version of the original choropleth map.

Bubble map combined with choropleth

Another way to visualize proportions of a variable in a map is using a bubbles map. This type of maps are useful to compare between quantities using a circle size and color to represent high and low values. In this example, we will visualize the states with the highest murder rate using bubbles and additionally we will use choropleths to visualize the states total popultation to find relationships between these variables:

tmap_mode("plot") # Change map mode to interactive
## tmap mode set to plotting
tm_shape(states_offenses) +
  tm_polygons("poblacion",
              palette = "Blues",
              alpha = 0.5,
              title = "Population") +
  tm_bubbles("hom_10khab", 
             col = "hom_10khab",
             title.size  = "Murder rate per 10K inhab.",
             title.col = "Murders per 10K inhabitants") +
  tm_layout(main.title = "Most violent states in Mexico, Dec. 2018 to Jun. 2021") +
  tm_credits("Data from INEGI and SESNSP.",
             position = c("left", "bottom"))

The map below is an example of how two different visualizations can be combined in the same map to relate different types of data.

Column plot

To complement the choropleth maps, let’s create a column plot with the states with the highest rates of murder per 10,000 inhabitants during the period, which are represented in the map by the orange and red colors (murders rate greater than 30). To achieve this, filter the states with hom_10khab >= 30 and sort them in descending order:

states_offenses %>% 
  as_tibble() %>% # Convert from sf to tibble object, this will remove geometries
  dplyr::select(entidad, hom_10khab) %>% # Pick the variables to be showed
  filter(hom_10khab >= 30) %>%  # Keep the states with a murder rate greater than 30
  ggplot(aes(x = fct_reorder(entidad, desc(hom_10khab)), y = hom_10khab, fill = entidad)) + # Create empty plot with sorted entidad and rates
  geom_col(show.legend = F) + # Add columns, don't show legend
  scale_fill_brewer(palette = "Blues") +
  geom_text(aes(label = round(hom_10khab, digits = 1)), vjust = -0.5) + # Add labels above columns
  labs(title = "Mexico's States with highest murder rates",
       subtitle = "December 2018 to June 2021",
       x = "State", 
       y = "Murders rate per 10,000 inhabitants") # Add titles and axis names

Datatable visualization

CDMX does not appear in the above graph, so it is useful to know its ranking in homicide rate per 10,000 inhabitants. To achieve this, it is possible to build an interactive table using the DT package which allows us to format rows and columns to emphasize the most important insights and also we can rearrange the data using any of the available variables:

states_offenses %>% 
  as_tibble() %>% # Convert from sf to tibble object, this will remove geometries 
  mutate(participacion = homicidio/sum(homicidio),
         ranking = dense_rank(desc(hom_10khab))) %>% 
  arrange(ranking) %>% 
  dplyr::select(ranking, entidad, homicidio, hom_10khab, participacion) %>% 
  datatable(colnames = c("Ranking", "State", "Murders total", "Murders rate per 10K inhabitants", "Percentage"),
            rownames = FALSE) %>% 
  formatRound(columns = "homicidio",
              digits = 0) %>% 
  formatRound(columns = "hom_10khab",
              digits = 2) %>% 
  formatPercentage(columns = "participacion",
                   digits = 1) %>% 
  formatStyle(columns = "participacion",
              background = styleColorBar(data = 0:1, color = "steelblue")) %>% 
  formatStyle(columns = "ranking",
              target = "row",
              fontWeight = styleEqual(levels = 1:5, values = rep("bold", 5))) %>% 
  formatStyle(columns = "entidad",
              target = "row",
              fontWeight = styleEqual(levels = "Ciudad de México", values = "bold"),
              backgroundColor = styleEqual(levels = "Ciudad de México", values = "lightblue"))

Using the interactive table below, it is possible to sort data using any variable and search for an specific state, in this case we can observe that the top 5 states with the highest homicide rates per 10,000 inhabitants are Colima, Baja California, Quintana Roo, Guanajuato and Chihuaha, while CDMX is ranked #21, but if the data is sorted by murders total it is possible to find out a different view of the problem where the states with the highest value of total murders are México, Baja California and Guanajuato, with the CDMX being part of this top 10.

Simple point clustering

Now that information on murders at the national level has been found, it will be necessary to go into detail with the data for the CDMX. In order to find patterns that are useful to learn more about the murder problem in the city, maps can be build with greater detail thanks to the fact that the records at city level are geo-referenced.

Load the previously processed layer murders_cdmx.gpkg, stored in Data folder:

murders_cdmx <-
  st_read("Data/murders_cdmx.gpkg") %>% 
  glimpse()
## Reading layer `murders_cdmx' from data source 
##   `/Users/cristiansilva/Documents/Centro Geo/iGISc 2021 Workshop/igisc-workshop_2021/Data/murders_cdmx.gpkg' 
##   using driver `GPKG'
## Simple feature collection with 2257 features and 20 fields (with 264 geometries empty)
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: -99.33316 ymin: 19.13077 xmax: -98.95981 ymax: 19.57635
## Geodetic CRS:  WGS 84
## Rows: 2,257
## Columns: 21
## $ ao_hechos            <dbl> 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2…
## $ mes_hechos           <chr> "Mayo", "Mayo", "Mayo", "Mayo", "Mayo", "Mayo", "…
## $ fecha_hechos         <dttm> 2019-05-17 19:00:00, 2019-05-17 19:30:00, 2019-0…
## $ ao_inicio            <dbl> 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2…
## $ mes_inicio           <chr> "Mayo", "Mayo", "Mayo", "Mayo", "Mayo", "Mayo", "…
## $ fecha_inicio         <dttm> 2019-05-17 20:26:53, 2019-05-17 23:40:11, 2019-0…
## $ delito               <chr> "HOMICIDIO POR ARMA BLANCA", "HOMICIDIOS INTENCIO…
## $ fiscalia             <chr> "INVESTIGACIÓN EN GUSTAVO A. MADERO", "INVESTIGAC…
## $ agencia              <chr> "GAM-4", "VC-3", "IZC-2", "AO-1", "AO-1", "COY-2"…
## $ unidad_investigacion <chr> "UI-2CD", "UI-1SD", "UI-3SD", "UI-3SD", "UI-3SD",…
## $ categoria_delito     <chr> "HOMICIDIO DOLOSO", "HOMICIDIO DOLOSO", "HOMICIDI…
## $ calle_hechos         <chr> "PROLONGACION MISTERIOS  ESQUINA  CON AVENIDA ACU…
## $ calle_hechos2        <chr> "AVENIDA INSUGENTES  NORTE", NA, "TALLERES GRAFIC…
## $ colonia_hechos       <chr> "TEPEYAC INSURGENTES", "MERCED BALBUENA", "AGRÍCO…
## $ alcaldia_hechos      <chr> "GUSTAVO A MADERO", "VENUSTIANO CARRANZA", "IZTAC…
## $ competencia          <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ longitud             <dbl> -99.11739, -99.12231, -99.06589, -99.19430, -99.2…
## $ latitud              <dbl> 19.48924, 19.42010, 19.42068, 19.38319, 19.37849,…
## $ tempo                <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ fecha                <date> 2019-05-18, 2019-05-18, 2019-05-18, 2019-05-18, …
## $ geom                 <POINT [°]> POINT (-99.11739 19.48924), POINT (-99.1223…

Quickly visualize the geographic points in a map:

tmap_mode("view") # Set map mode as interactive
## tmap mode set to interactive viewing
qtm(murders_cdmx) # Quick thematic map with murder points
## Warning: The shape murders_cdmx contains empty units.

Leaflet is a well-known javascript library for building interactive web maps that can be used also in R, in fact the interactive maps built with the tmap package rely on it to display interactive maps in view mode. As seen in section 1, there is another alternative to the tmap package to build interactive maps using Leaflet directly using R through the leaflet package.

Show the murder points in a map, now using leaflet package:

library(leaflet)  # Load leaflet package

leaflet(murders_cdmx) %>% # Create an empty map with the murders layer
  addTiles() %>% # Add a basemap, by default uses OpenStreetMap
  addCircles() # Add a points layer as circles
## Warning in validateCoords(lng, lat, funcName): Data contains 264 rows with
## either missing or invalid lat/lon values and will be ignored
# Alternatively, you can use marker icons instead circles, using addMarkers function, not recommended for large datasets (uncomment following lines to try out):
# leaflet(murders_cdmx) %>% # Create an empty map with the murders layer
#   addTiles() %>% # Add a basemap, by default uses OpenStreetMap
#   addMarkers() # Add a points layer as markers

Leaflet can be used to clusterize points in a simple way, repeat the example below now using the parameter clusterOptions = markerClusterOptions() on the addMarkers instead addCircle function:

leaflet(murders_cdmx) %>% # Create an empty map with the murders layer
  addTiles() %>% # Add a basemap, by default uses OpenStreetMap
  addMarkers(label = ~fecha_hechos, # Shows date when hover a point 
             popup = ~fecha_hechos, # Shows date when click on a point
             clusterOptions = markerClusterOptions()) # Add a points layer as circles
## Warning in validateCoords(lng, lat, funcName): Data contains 264 rows with
## either missing or invalid lat/lon values and will be ignored

This interactive cluster maps are useful to find specific areas in the city where the murders happen more frequently, the point clusters are represented as circles with the number of total represented points, colorized from lower to higher and located in the common centroid between them. It is possible to interactively browse and expand the clusters when zooming in and out and thus identify streets and areas with a high incidence of murders.

Hotspots map

Hotspots maps uses a color scale to contrast zones with low (cold) and high (hot) values. In this example we will use the previously Kernel Density Estimation (KDE) raster file created in section 4 to build a map intended for visualization of murders incidence density areas in the city.

Read the raster file using the raster function:

murders_raster <- raster("Data/murders_kde.tif")
## Warning in showSRID(SRS_string, format = "PROJ", multiline = "NO", prefer_proj
## = prefer_proj): Discarded datum Unknown_based_on_GRS80_ellipsoid in Proj4
## definition
# Preview raster data contents:
murders_raster
## class      : RasterLayer 
## dimensions : 128, 128, 16384  (nrow, ncol, ncell)
## resolution : 348.5856, 470.7479  (x, y)
## extent     : 461655.7, 506274.7, 2106166, 2166422  (xmin, xmax, ymin, ymax)
## crs        : +proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs 
## source     : murders_kde.tif 
## names      : murders_kde 
## values     : -5.02363e-22, 1.267477e-05  (min, max)

Visualize the raster layer in a map using tmap package:

tm_shape(murders_raster) +
  tm_basemap() +
  tm_raster(palette = "YlOrRd",
            alpha = 0.5)

The resulting map shows several concentration zones in red. The values in the color scale represents the murders density per grid area unit.

Decision making

  1. Eight states with the highest number of murders: Guerrero, Baja California, Michoacán, Jalisco, Guanajuato, Estado de México, Veracruz and Chihuahua.
  2. According to the crimes that could be associated with organized crime (murder, extortion and kidnapping) there are states that have some similarities, especially in the northern border, the Pacific and some states adjacent to the center, such as San Luis Potosí and Puebla.
  3. This type of study can be expanded, incorporating more variables, and coordination between states that share borders can be suggested to implement joint decisions.
  4. Mexico City presents a pattern of accumulation of murders in the center of the city. The distance from the first nearest neighbor in murders is 265 meters.
  5. The eastern and northern zones of the city also show patterns of accumulation.
  6. In subsequent studies, correlation studies and schedules of events can be carried out in order to carry out prevention programs.

References